package com.sxj.corejava.code15_反射;

import java.lang.annotation.*;

// @Target注解:用于定义当前自定义注解的作用域,其作用域的值是一个枚举类型
// 通过value属性指定作用域,作用域的值可以存在多个,通过数组表示
//@Target(value = ElementType.TYPE)
//@Target(value = {ElementType.TYPE,ElementType.FIELD,ElementType.METHOD})
// 如果注解中有且仅有value属性,可以直接写属性值
//@Target({ElementType.TYPE,ElementType.FIELD,ElementType.METHOD})
@Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD})
// 定义当前自定义注解的生命周期
@Retention(RetentionPolicy.RUNTIME)
// 指定当使用javadoc生成API文档的时候可以包含该自定义注解的信息
@Documented
// 表示允许子类继承父类中的注解
@Inherited
public @interface SomeAnnotation {

    // 定义注解属性时,每一个注解属性对应一个方法
    // 在自定义注解中,注解方法是一个抽象方法,没有做具体实现,但是我们可以认为他是一个属性
    // 如果要为该属性赋值,通过default进行赋值
    // 在使用自定义注解中的该属性时,如果没有为属性赋值,则使用默认值,如果赋值了则使用赋值的值
    String name() default "admin";

    // 当没有给注解属性设置默认值时,在使用该注解时必须指定该属性的值
    String[] value() default {"sayHello", "test"};

    int age() default 20;

    int id() default 1;

}
